package controlador;

import java.awt.event.ActionEvent;
import java.util.EventListener;
import java.util.Iterator;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import java.util.List;
import vista.Mensaje;
import vista.VentanaBuscarProveedor;
import modelo.Proveedor;
import modelo.ProveedorDao;

public class ControladorBuscarProveedor extends WindowAdapter implements MouseListener,ActionListener 
{

    private VentanaBuscarProveedor ventana;
    private EventListener controlador;
    private DefaultTableModel modeloTabla;
    
    public ControladorBuscarProveedor(JFrame frame,EventListener c)
    {
    	ventana= new VentanaBuscarProveedor(frame);
    	controlador= c;
    	
    	modeloTabla= new DefaultTableModel();
    	
    	ventana.addListener((ActionListener) this);
    	ventana.addListener((WindowListener) this);
    	ventana.addListener((MouseListener) this);
    	
    	ventana.setVisible(true);
    }
	
    private void cargarTabla()
    {
    	try
    	{
    	  List<Proveedor> listaProveedores = new ProveedorDao().consultarProveedoresActivos();
    	  Object[] encabezados= {"Codigo Proveedor","Nombre Proveedor"};
    	  
    	  Object[][] data= new Object[listaProveedores.size()][encabezados.length];
    	  
    	  int i= 0;
    	  
    	  Iterator<Proveedor> iterador= listaProveedores.iterator();
    	  Proveedor proveedor= null;
    	  
    	  while (iterador.hasNext())
    	  {
    		  proveedor= iterador.next();
    		  
    		  data[i][0]= proveedor.getCodProveedor();
    		  data[i][1]= proveedor.getNombre();
    		  
    		  ++i;
    	  }
    	  
    	  modeloTabla= new ModeloTabla(data,encabezados);
    	  
    	  
    	}
    	catch(Exception e)
    	{
    		Mensaje.mostrarError("Error cargando tabla");
    		modeloTabla= new DefaultTableModel();
    	}
    	
    	ventana.asignarDatosTabla(modeloTabla);
    }
    
    
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if (e.getActionCommand().equalsIgnoreCase("ACEPTAR"))
		{
			
			if (controlador instanceof ControladorCompra)
			{
				
				ControladorCompra c= (ControladorCompra) controlador;
				
				c.asignarProveedor(ventana.getCodigo());
				
				
				ventana.setVisible(false);
				ventana.dispose();
			}
		}
		else if (e.getActionCommand().equalsIgnoreCase("CANCELAR"))
		{
			if (controlador instanceof ControladorCompra)
			{
				ControladorCompra c= (ControladorCompra) controlador;
				
				c.asignarProveedor("");
				ventana.setVisible(false);
				ventana.dispose();
			}
		}
		
	}

	


	@Override
	public void mouseClicked(MouseEvent arg0) 
	{
		int indiceSeleccionado= ventana.getFilaSeleccionada();
		
		if (indiceSeleccionado!=-1 && (modeloTabla instanceof ModeloTabla))
		{
			ventana.asignarCodigo((String) modeloTabla.getValueAt(indiceSeleccionado, 0));
			ventana.asignarNombre((String) modeloTabla.getValueAt(indiceSeleccionado, 1));
		}
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	public void windowClosing(WindowEvent evt)
	{
		if (controlador instanceof ControladorCompra)
		{
			ControladorCompra c= (ControladorCompra) controlador;
			
			c.asignarProveedor("");
		}
		ventana.setVisible(false);
		ventana.dispose();
	}
	
	public void windowOpened(WindowEvent evt)
	{
		
		cargarTabla();
	}
	
	class ModeloTabla extends DefaultTableModel
	{
		ModeloTabla(Object data[][],Object[] encabezados)
		{
			super(data,encabezados);
		}
		
		 public boolean isCellEditable(int row,int col)
		 {
		        return false;
		 }
	}

}

